#include "Ftp_Diy.h"

//************************************
// Method:    	FtpPutFile				FTP文件传输（姜炜整合已有库形成）
// Programmer:  lww
// Time:		2019/3/24
// Returns:   	GLOBALDEF int			0-失败；1-成功
// Parameter: 	char * Net_Segment		网段名称，例如：192.168.0.
// Parameter: 	char Ip					对方IP地址
// Parameter: 	char * Ftp_Name			FTP客户端名称
// Parameter: 	char * Ftp_Passwd		FTP客户端密码
// Parameter: 	char * Scr_Path			文件源路径
// Parameter: 	char * Dst_Path			文件目标路径
//************************************
bool FtpPutFile(const char* Net_Segment, char Ip, const char* Ftp_Name, const char* Ftp_Passwd, const char* Scr_Path, const char* Dst_Path)
{
#define FTP_PORT	":21"
#define WRONG_DEAL(name)	{\
	if(name == 0){return false;}\
}

	char* Net=nullptr;   //一定要初始化 lbj20211123
	char Ip_Str[3] = { 0 };
	netbuf* ctrl=nullptr; //一定要初始化lbj20211123
	FILE* file = NULL;

	sprintf(Ip_Str, "%d", ((int)Ip));
	Net = (char*)calloc(strlen(Net_Segment) + strlen(Ip_Str) + strlen(FTP_PORT), sizeof(char));
	strcpy(Net, Net_Segment);
	strcat(Net, Ip_Str);
	strcat(Net, FTP_PORT);
	
	file = fopen(Scr_Path, "r");
	if (file == NULL)
	{
		file = fopen(Scr_Path, "a");
		if (file == NULL)
			return false;
	}
		
	printf("%s begin to ftp to slave!\r\n", Scr_Path);
	WRONG_DEAL(FtpConnect(Net, &ctrl)); //打开FTP连接（Net：要连接的FTP服务器    ctrl：FTP服务器的端口）
	WRONG_DEAL(FtpLogin(Ftp_Name, Ftp_Passwd, ctrl));	//登录FTP服务器（Ftp_Name：用于登录的用户名  Ftp_Passwd：用于登录的密码	 ctrl：要登录的FTP连接）
	WRONG_DEAL(FtpPut(Scr_Path, Dst_Path, FTPLIB_BINARY, ctrl));//上传本地一个文件到 FTP 服务器上
	WRONG_DEAL(FtpClose(ctrl));//关闭FTP连接
	printf("%s ftp put finish!\r\n", Scr_Path);
	return true;

#undef FTP_PORT
#undef WRONG_DEAL
}



//************************************
// Method:    	FtpGetFile				FTP文件传输（对FTP Put 略作修改得到）（未用到，没测试过，应该有问题，谨慎使用）
// Programmer:  lbj
// Time:		2021/12/23
// Returns:   	GLOBALDEF int			0-失败；1-成功
// Parameter: 	char * Net_Segment		网段名称，例如：192.168.0.
// Parameter: 	char Ip					对方IP地址
// Parameter: 	char * Ftp_Name			FTP客户端名称
// Parameter: 	char * Ftp_Passwd		FTP客户端密码
// Parameter: 	char * Scr_Path			文件源路径
// Parameter: 	char * Dst_Path			文件目标路径
//************************************
bool FtpGetFile(const char* Net_Segment, char Ip, const char* Ftp_Name, const char* Ftp_Passwd, const char* Scr_Path, const char* Dst_Path)
{
#define FTP_PORT	":21"
#define WRONG_DEAL(name)	{\
	if(name == 0){return false;}\
}

	char* Net = nullptr;   //一定要初始化 lbj20211123
	char Ip_Str[3] = { 0 };
	netbuf* ctrl = nullptr; //一定要初始化lbj20211123
	FILE* file = NULL;

	sprintf(Ip_Str, "%d", ((int)Ip));
	Net = (char*)calloc(strlen(Net_Segment) + strlen(Ip_Str) + strlen(FTP_PORT), sizeof(char));
	strcpy(Net, Net_Segment);
	strcat(Net, Ip_Str);
	strcat(Net, FTP_PORT);



	printf("%s begin to ftp to slave!\r\n", Scr_Path);
	WRONG_DEAL(FtpConnect(Net, &ctrl));
	WRONG_DEAL(FtpLogin(Ftp_Name, Ftp_Passwd, ctrl));
	WRONG_DEAL(FtpGet(Scr_Path, Dst_Path, FTPLIB_BINARY, ctrl));
	file = fopen(Scr_Path, "r");
	if (file == NULL)
	{
		file = fopen(Scr_Path, "a");
		if (file == NULL)
			return false;
	}
	WRONG_DEAL(FtpClose(ctrl));
	printf("%s ftp get finish!\r\n", Scr_Path);
	return true;

#undef FTP_PORT
#undef WRONG_DEAL
}